function [downsampled_data, time_vector_coarse] = downsample_by_average(original_data, dt_fine, dt_coarse)
% DOWNSAMPLE_BY_AVERAGE - 通过区间平均法对时间序列数据进行降采样
%
% 输入:
%   original_data - 原始的高频时间序列数据 (列向量)。
%   dt_fine       - 原始数据的精细时间步长 (例如 0.005s)。
%   dt_coarse     - 想要降采样到的粗略时间步长 (例如 0.1s)。
%
% 输出:
%   downsampled_data  - 降采样后的数据 (列向量)。
%   time_vector_coarse - 与降采样后数据对应的新时间向量。

    % 1. 检查参数是否合理
    if mod(dt_coarse, dt_fine) ~= 0
        error('粗略时间步长必须是精细时间步长的整数倍!');
    end

    % 2. 计算降采样比例因子
    ratio = round(dt_coarse / dt_fine);

    % 3. 计算可以完整分组的数据长度
    num_groups = floor(length(original_data) / ratio);
    trimmed_length = num_groups * ratio;
    
    % 4. 裁剪原始数据，使其长度可以被比例因子整除
    trimmed_data = original_data(1:trimmed_length);

    % 5. 核心步骤：重塑与平均
    %    - 将一维长向量重塑为一个 (ratio x num_groups) 的矩阵
    %      这样每一列都代表一个0.1s时间窗口内的数据点
    reshaped_data = reshape(trimmed_data, ratio, num_groups);
    
    %    - 沿着矩阵的列方向计算平均值
    downsampled_data = mean(reshaped_data, 1)'; % 使用'转置为列向量

    % 6. 生成新的时间向量
    time_vector_coarse = (0:num_groups-1)' * dt_coarse;

end